package solutions.ferpa.ztest.intf;

import br.com.telescope.adsrt.dom.DomText;
import br.com.telescope.adsrt.dom.DomTextHtml;
import br.com.telescope.adsrt.lib.*;
import br.com.telescope.adsrt.lib.Field;
import br.com.telescope.t2.AccessPolicy;
import br.com.telescope.t2.ServiceModel;
import br.com.telescope.t2.exception.ApplicationRuntimeException;
import br.com.telescope.t2.feature.CustomActionFeature;
import java.util.ArrayList;
import java.util.List;
import solutions.ferpa.ztest.ent.*;

/**
 * Confirmação de leitura.
 * <p>
 * Esta interface é utilizada como um componente auxiliar para resolver o 
 * problema comum de forçar/induzir o usuário a ler TODAS as informações 
 * que estão na página.
 * <P>
 * Para ser utilizada, ela deve ser referenciada em um evento pos-display 
 * na tela desejada. Normalmente, este evento será o último evento de 
 * pos-display desta tela. Dois parâmetros devem ser informados:
 * <P>
 * * O nome da ação ou das ações que devem exigir a leitura
 * <P>
 * * A mensagem (opcional) a ser apresentada para o usuário
 * <P>
 * 
 * <P>
 * O funcionamento é feito da seguinte forma: Primeiro, o sistema 
 * apresenta a mensagem desejada junto a um check-box desmarcado. Caso a 
 * mensagem não seja informada, o sistema utiliza a mensagem "Li e 
 * concordo com os dados acima!". Em seguida, o sistema move os botões da 
 * origem (conforme indicado no parâmetro) para baixo desta mensagem e 
 * desabilita-os.
 * <P>
 * 
 * <P>
 * Considerando que o usuário esteja tentando executar a ação em questão, 
 * ele será obrigado a rolar a página até o final (último pos-display), 
 * clicar no check-box para habilitar os botões, e só então clicar no 
 * botão da ação desejada.
 * <P>
 * 
 * <P>
 * Telescope origin: RTUTIL.CONFIRMACAO_LEITURA
 * <P>
 * @author TELESCOPE - Build task T2 Web Interface Generator
 * <P>
 * @version 0.1
 */
public class ConfirmacaoLeitura extends ServiceModel {
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    public static final String GLOBAL_NAME = "RTUTIL.CONFIRMACAO_LEITURA";
    
    @Override
    public String globalName() {
        return GLOBAL_NAME;
    }
    
    {
        setTitle("Confirmação de leitura");
    }
    
    
    // Service parameters
    private DomText pAcoes;
    private DomTextHtml pMensagem;
    
    // Record items
    
    // Query items
    
    @Override
    public void initAttributes() {
        
    }
    
    @Override
    public void initParameters() {
        pAcoes = new DomText(ctx, "ACOES", "Ações");
        pAcoes.setValue(ctx.getParameter("P_ACOES"));
        pAcoes.setUnbound(true);
        pMensagem = new DomTextHtml(ctx, "MENSAGEM", "Mensagem");
        pMensagem.setValue(ctx.getParameter("P_MENSAGEM"));
        pMensagem.setUnbound(true);
    }
    
    @Override
    public List<Field> getParameters() {
        if (allParameters == null) {
            allParameters = new ArrayList<Field>();
            allParameters.add(pAcoes);
            allParameters.add(pMensagem);
        }
        return allParameters;
    }
    
    @Override
    public String getDefaultOrderBy() {
        return "";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="CUSTOM">
    public class FCustom extends CustomActionFeature {
        
        @Override
        public void initForm() {
        }
        
        @Override
        public int getAccessPolicy() {
            return AccessPolicy.PUBLIC;
        }
        
        @Override
        public void execute() {
            try {
                custom();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        {
            setFeatureName("CUSTOM");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="initFeatures">
    
    @Override
    protected void initFeatures() {
        addFeature(new FCustom());
        super.initFeatures();
    }
    
    @Override
    public String getDefaultFeature() {
        return "CUSTOM";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Getters and Setters">
    
    public String getParameterAcoes() {
        return pAcoes.getValue();
    }
    
    public void setParameterAcoes(String value) {
        pAcoes.setValue(value);
    }
    
    public String getParameterMensagem() {
        return pMensagem.getValue();
    }
    
    public void setParameterMensagem(String value) {
        pMensagem.setValue(value);
    }
    // </editor-fold>
    
    /**
     * null.
     * <p>
     * Apresenta a mensagem 'Li e concordo com os dados acima!' junto a um 
     * check-box desmarcado.
     * <P>
     * Em seguida move os botões da origem (conforme indicado no parâmetro) 
     * para baixo da mensagem mantendo-os desabilitados.
     * <P>
     * Para habilitar os botões, o usuário terá que primeiro selecionar o 
     * check-box da mensagem.
     * <P>
     */
    public void custom() throws AdsException {
        // <user-code id="834137" parentId="834125" hashcode="427ec014" length="852">
        ctx.p("<script type=\"text/javascript\">var actions = '" + getParameterAcoes() + "'.split(',');function disabledButton(disabled) { $.each(actions, function (key, action) {$('#action-button-' + $.trim(action).toLowerCase()).attr('disabled', disabled); }); } </script>");
        ctx.p("<script type=\"text/javascript\">$(function(){$.each(actions, function (key, action) {$('#action-button-' + $.trim(action).toLowerCase()).appendTo('#actions-cloned'); });disabledButton(true);});</script>");
        ctx.p("<div id=\"confirmation-action\"><input type=\"checkbox\" onclick=\"disabledButton(false)\" id=\"check-action\" /> <label for=\"check-action\">" + (getParameterMensagem().isEmpty() ? "Li e concordo com os dados acima?" : getParameterMensagem()) + "</label></div>");
        ctx.p("<div id=\"actions-cloned\" class=\"form-actions\"></div><div class=\"clear\"></div>");
        // </user-code>
    }
}
